/*
 * 项目名称:    wms-server-jeecg
 * 创建人员:    DongPeng
 * 创建时间:    2023-07-25
 * copyright(c) 2022 无锡星智数服科技有限公司
 */
package org.jeecg.config.init;

import com.xuanner.seq.RedisSeqBuilder;
import com.xuanner.seq.SnowflakeSeqBuilder;
import com.xuanner.seq.sequence.Sequence;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * 序列对象配置
 *
 * @author DongPeng
 * @version 1.0.0
 * @date 2023-07-25
 * @description 类描述
 */
@Component
@Slf4j
public class SequenceConfig {

    @Value("${spring.redis.host:}")
    private String ip;

    @Value("${spring.redis.port:}")
    private int port;

    @Value("${spring.redis.password:}")
    private String auth;

    public static Sequence sequence;

    @Bean
    public void init() {
        /**
         * 方式一 使用DB获取区间方式
         * 参数说明如下：
         * dataSource：数据库的数据源
         * bizName：具体某中业务的序列号
         * step：[可选] 默认1000，即每次取redis获取步长值，根据具体业务吞吐量来设置，越大性能越好，但是序列号断层的风险也就越大
         */
        //数据源
//        DruidDataSource dataSource = new DruidDataSource();
//        dataSource.setUrl("xxx");
//        dataSource.setUsername("xxx");
//        dataSource.setPassword("xxx");
//        dataSource.setMaxActive(300);
//        dataSource.setMinIdle(50);
//        dataSource.setInitialSize(2);
//        dataSource.setMaxWait(500);
//
//        sequence = DbSeqBuilder.create().dataSource(dataSource).bizName("userId").build();

        /**
         * 方式二 使用Redis获取区间方式
         * 参数说明如下：
         * ip：redis连接ip
         * port：redis连接port
         * auth：如果redis设置了密码权限需要设置，没有就可以不用设置
         * bizName：具体某中业务的序列号
         * step：[可选] 默认1000，即每次取redis获取步长值，根据具体业务吞吐量来设置，越大性能越好，但是序列号断层的风险也就越大
         */
        //这里使用方式二redis
        sequence = RedisSeqBuilder.create().ip(ip).port(port).auth(auth).step(1).bizName(
                "business").build();

        /**
         * 方式三 使用雪花算法方式
         * 参数说明如下：
         * datacenterId: 一般可以设置机房标志，值只能设置[0-31]之间
         * workerId: 一般设置主机编号，值只能设置[0-31]之间
         * 只用这来那个值保证服务器唯一就可以
         */
        //sequence = SnowflakeSeqBuilder.create().datacenterId(1).workerId(2).build();
    }



}
